package com.yt.sys.service;

        import org.apache.dubbo.config.annotation.DubboService;
        import org.springframework.beans.BeanUtils;
        import javax.annotation.Resource;
        import java.util.Date;
        import com.baomidou.mybatisplus.service.impl.ServiceImpl;
        import com.yt.sys.mapper.SysRoleMapper;
        import com.yt.sys.models.service.ISysRoleService;
        import com.yt.sys.models.bo.SysRoleSaveBO;
        import com.yt.sys.models.dto.SysRoleDTO;
        import com.yt.common.exception.BusinessException;
        import com.yt.common.enums.CodeEnum;
        import com.yt.product.common.config.YmlConfig;

@DubboService
public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRoleDTO> implements ISysRoleService{

    @Resource
    private YmlConfig ymlConfig;

    @Override
    public boolean add(SysRoleSaveBO saveBO) {
        // 1. 参数校验
        validateRoleSaveBO(saveBO);

        // 2. BO转换为DTO
        SysRoleDTO dto = new SysRoleDTO();
        BeanUtils.copyProperties(saveBO, dto);

        // 3. 设置默认值
        setRoleDefaultValues(dto);

        // 4. 生成并设置主键ID
        Long id = ymlConfig.getPkId();
        dto.setId(id);

        // 5. 插入数据库
        return this.insert(dto);
    }

    /**
     * 角色信息参数校验
     */
    private void validateRoleSaveBO(SysRoleSaveBO saveBO) {
        if (saveBO == null) {
            throw new BusinessException(CodeEnum.FAIL_100001.getCode(), "角色信息不能为空");
        }
        if (saveBO.getRoleName() == null || saveBO.getRoleName().trim().isEmpty()) {
            throw new BusinessException(CodeEnum.FAIL_100002.getCode(), "角色名称不能为空");
        }
        if (saveBO.getStatus() == null || (saveBO.getStatus() != 0 && saveBO.getStatus() != 1)) {
            throw new BusinessException(CodeEnum.FAIL_100003.getCode(), "角色状态必须为0（禁用）或1（启用）");
        }
    }

    /**
     * 设置角色信息默认值
     */
    private void setRoleDefaultValues(SysRoleDTO dto) {
        // 乐观锁版本号默认0
        dto.setRevision(dto.getRevision() != null ? dto.getRevision() : 0);

        // 角色图标默认空字符串（避免null）
        dto.setRoleLogo(dto.getRoleLogo() != null ? dto.getRoleLogo() : "");

        // 角色描述默认空字符串
        dto.setRoleDes(dto.getRoleDes() != null ? dto.getRoleDes() : "");

        // 创建时间和更新时间默认当前时间
        Date now = new Date();
        dto.setCreateTime(dto.getCreateTime() != null ? dto.getCreateTime() : now);
        dto.setUpdateTime(dto.getUpdateTime() != null ? dto.getUpdateTime() : now);
    }
}